package com.beverage.lemonade.process;

import android.annotation.SuppressLint;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

@SuppressLint("UseSparseArrays")
public class MyJson {

	protected JSONObject jsonObject;
	protected JSONArray jsonArray;

	protected UserInfoJson userInfoJson;
	protected List<ContentJson> contentMap;

	public MyJson(UserInfoJson userInfoJson) throws JSONException {

		this.userInfoJson = userInfoJson;
		this.jsonArray = new JSONArray();
		this.jsonObject = new JSONObject();
		this.jsonObject.put("USER", userInfoJson);
		this.jsonObject.put("CONTENT", jsonArray);

	}

	public MyJson(UserInfoJson userInfoJson, List<ContentJson> contentMap)
			throws JSONException {

		this.userInfoJson = userInfoJson;
		this.contentMap = contentMap;
		this.jsonArray = new JSONArray(contentMap);
		this.jsonObject = new JSONObject();
		this.jsonObject.put("USER", userInfoJson);
		this.jsonObject.put("CONTENT", jsonArray);

	}

	public MyJson(String json) throws JSONException {
		this.jsonObject = new JSONObject(json);
		this.jsonArray = this.jsonObject.getJSONArray("CONTENT");
		this.userInfoJson = new UserInfoJson(this.jsonObject.getJSONObject(
				"USER").toString());
		this.contentMap = new ArrayList<ContentJson>();
		setContentMap();
	}

	public JSONObject getJsonObject() {
		return jsonObject;
	}

	public void setJsonObject(JSONObject jsonObject) {
		this.jsonObject = jsonObject;
	}

	public JSONArray getJsonArray() {
		return jsonArray;
	}

	public void setJsonArray(JSONArray jsonArray) {
		this.jsonArray = jsonArray;
	}

	public UserInfoJson getUserInfoJson() {
		return userInfoJson;
	}

	public void setUserInfoJson(UserInfoJson userInfoJson) {
		this.userInfoJson = userInfoJson;
		resetUser();
	}

	public List<ContentJson> getContentMap() {
		return contentMap;
	}

	public void setContentMap(List<ContentJson> contentMap) {
		this.contentMap = contentMap;
		resetContent();
	}

	protected void resetContent() {
		jsonArray = new JSONArray(contentMap);
		jsonObject.remove("CONTENT");
		try {
			jsonObject.put("CONTENT", jsonArray);
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void addContentJson(ContentJson contentjson) {
		contentMap.add(contentjson);
		resetContent();
	}

	protected void resetUser() {
		jsonObject.remove("USER");
		try {
			jsonObject.put("USER", userInfoJson);
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	protected void setContentMap() throws JSONException {
		int count = jsonArray.length();
		for (int i = 0; i < count; i++) {
			ContentJson contentJson = new ContentJson(jsonArray
					.getJSONObject(i).toString());
			this.contentMap.add(contentJson);
		}
	}

	public String getPostString() {
		return jsonObject.toString();
	}

}
